<?php

/*
  --- PROJECT COFELY 2012, StatBedrijfsonderdeel --
  @author: Leander Molegraaf
  @category: statistieken
  @name StatBedrijfsonderdeel

  @see StatBedrijfsonderdeelOverzicht.php

  @version 1.2.3
  datum: 26-04-2012

  BESCHRIJVING:
  Deze klasse bevat alle gegevens van 1 bedrijfsonderdeel van 1 maand voor het overzicht van bedrijfsonderdeelen van de afgelopen maand

  WERKING:
  Deze klasse wordt aangeroepen met 7 waardes:
  - de naam van de bedrijfsonderdeel
  - de statistieksoort (TBM/WPI)
  - een databaseklasse
  - de maand van het begin van de periode
  - de jaar van het begin van de periode
  - de maand van het einde van de periode
  - de jaar van het einde van de periode

  OPMERKINGEN:
  1.1 Er wordt een al ingevulde DBklasse verwacht.

  CHANGELOG:
  1.2.1:
  - calculatePercentage geeft niet langer een 'division by zero' als de totaalwaarde 0 is.
  - calculatePercentage verkort
  - mogelijke geintegreerd om gegevens van een bepaald periode te krijgen.
  - functie genereerRij verwijderd
  - comments verbeterd

  1.2.2:
  - bestandsnamen van de statistiek beginnen allemaal met Stat

  1.3:
  - namen veranderd zodat er meer overeenkomsten zijn met de rest van mijn klassen
  - documentatie geupdate
  - ongebruikte variabelen verwijderd
  - calculatePercentage private gemaakt

  GERELATEERDE BESTANDEN:
  StatBedrijfsonderdeelOverzicht.php(klasse die deze klasse oproept)
 */
require_once 'defs/Constants.php';

class StatBedrijfsonderdeel {

    private $BONaam; //String
    private $aantalGevolgd, $aantalGevolgdPercentage, $aantalGemistMetReden, $aantalGemistMetRedenPercentage, $aantalGemist, $aantalGemistPercentage, $aantalOperationeel; //int

    /**
     * constructor
     * @param String $PCNaam de naam van de bedrijfsonderdeel
     * @param String $statistiekSoort welke type statistiek dit is (WPI/TBM)
     * @param StatStatistiekenRapport $statistiekDB de databaseklassen
     * @since Version 1.0
     */

    public function __construct($bedrijfsonderdeel, $statistiekSoort, $StatistiekDB) {
        if ($statistiekSoort == STAT_WERKPLEKINSPECTIE) {
            $this->setAantalOperationeel($bedrijfsonderdeel->getWPIPlichtig());
        } else {
            $this->setAantalOperationeel($bedrijfsonderdeel->getOperationeel());
        }

        $lijst = count($bedrijfsonderdeel->gebruikersLijst);

        for ($nummer = 0; $nummer < count($lijst); $nummer++) {
            $this->aantalGevolgd += $bedrijfsonderdeel->gebruikersLijst[$nummer]->getAantalGevolgd();
            $this->aantalGemist += $bedrijfsonderdeel->gebruikersLijst[$nummer]->getAantalGemist();
            $this->aantalGemistMetReden += $bedrijfsonderdeel->gebruikersLijst[$nummer]->getAantalGemistMetReden();
        }

        $this->setAantalGevolgdPercentage($this->calculatePercentage($this->getAantalGevolgd(), $lijst));
        $this->setAantalGemistPercentage($this->calculatePercentage($this->getAantalGemist(), $lijst));
        $this->setAantalGemistMetRedenPercentage($this->calculatePercentage($this->getAantalGemistMetReden(), $lijst));
    }

    public function getBONaam() {
        return $this->BONaam;
    }

    public function setBONaam($PCNaam) {
        $this->BONaam = $PCNaam;
    }

    public function getAantalGevolgd() {
        return $this->aantalGevolgd;
    }

    public function setAantalGevolgd($aantalGevolgd) {
        $this->aantalGevolgd = $aantalGevolgd;
    }

    public function getAantalGevolgdPercentage() {
        return $this->aantalGevolgdPercentage;
    }

    public function setAantalGevolgdPercentage($aantalGevolgdPercentage) {
        $this->aantalGevolgdPercentage = $aantalGevolgdPercentage;
    }

    public function getAantalGemistMetReden() {
        return $this->aantalGemistMetReden;
    }

    public function setAantalGemistMetReden($aantalGemistMetReden) {
        $this->aantalGemistMetReden = $aantalGemistMetReden;
    }

    public function getAantalGemistMetRedenPercentage() {
        return $this->aantalGemistMetRedenPercentage;
    }

    public function setAantalGemistMetRedenPercentage($aantalGemistMetRedenPercentage) {
        $this->aantalGemistMetRedenPercentage = $aantalGemistMetRedenPercentage;
    }

    public function getAantalGemist() {
        return $this->aantalGemist;
    }

    public function setAantalGemist($aantalGemist) {
        $this->aantalGemist = $aantalGemist;
    }

    public function getAantalGemistPercentage() {
        return $this->aantalGemistPercentage;
    }

    public function setAantalGemistPercentage($aantalGemistPercentage) {
        $this->aantalGemistPercentage = $aantalGemistPercentage;
    }

    public function getAantalOperationeel() {
        return $this->aantalOperationeel;
    }

    public function setAantalOperationeel($aantalOperationeel) {
        $this->aantalOperationeel = $aantalOperationeel;
    }

    /**
     * berekend het percentage dat aantalVanTotaal is tov het totaal
     * @name calculatePercentage
     * @param int $cijferVanTotaal het kleinste getal
     * @param int $totaal het totaal 
     * @since Version 1.0
     * @return double $resultaat het resultaat, of 0.
     */
    private function calculatePercentage($cijfer, $totaal) { //int, int
        if ($cijfer > 0) {
            $calc = ($totaal / $cijfer) * 100;
            return(round($calc, 1, PHP_ROUND_HALF_DOWN));
        } else {
            return 0;
        }
    }

}

?>